package com.csun.cmny.provider.service;

import com.csun.cmny.base.dto.LoginAuthDto;
import com.csun.cmny.core.support.IService;
import com.csun.cmny.provider.model.domain.DmcDeviceUserBind;
import com.csun.cmny.provider.model.dto.app.DmcPersonMainDto;
import com.csun.cmny.provider.model.vo.app.AppDeviceTypeVo;

import java.util.List;

/**
 * @author chenzheng
 * @description:
 * @date 2019/9/25 16:23
 */
public interface DmcDeviceUserBindService extends IService<DmcDeviceUserBind> {

    /**
     * 用户与设备号进行绑定
     * @param personMainDto
     * @return
     */
    Integer userBindsDevice(DmcPersonMainDto personMainDto);

    /**
     * 查询用户绑定的设备列表
     * @param userId
     * @return
     */
    List<AppDeviceTypeVo> queryDeviceList(Long userId);

    /**
     * 老人与设备号进行绑定
     * @param personMainDto
     * @param loginAuthDto
     * @return
     */
    Integer saveDeviceOldBind(DmcPersonMainDto personMainDto ,LoginAuthDto loginAuthDto);

    /**
     * 老人与设备号进行解绑
     * @param personMainDto
     * @return
     */
    Integer removeOldManBind(DmcPersonMainDto personMainDto);

    /**
     * 删除设备与用户的绑定关系
     * @param personMainDto
     * @return
     */
    Integer removeDeviceUserBind(DmcPersonMainDto personMainDto);

    /**
     * 通过设备Id设置设备阈值
     * @param: [dmcPersonMainDto, loginAuthDto]
     * @return: java.lang.Integer
     */
    Integer setDeviceThresholdByDeviceId(DmcPersonMainDto dmcPersonMainDto, LoginAuthDto loginAuthDto);

    /**
     * 获取设备阈值
     * @param: [dmcPersonMainDto, loginAuthDto]
     * @return: java.lang.Integer
     */
    DmcDeviceUserBind getDeviceThresholdByDeviceId(DmcPersonMainDto dmcPersonMainDto, LoginAuthDto loginAuthDto);

    /**
     * 通过老人id解除设备绑定
     * @param: [oldmanId]
     * @return: com.csun.cmny.util.wrapper.Wrapper<java.lang.Integer>
     */
    Integer breakBindDeviceByOldmanId(Long oldmanId);

    /**
     * 查询用户所拥有的设备类型
     *
     * @param userId    the user id
     *
     * @return  the list.
     */
    List<Long> queryDeviceIdList(Long userId);

    /**
     * query not bind device id list
     *
     * @param deviceIdList  the device id list
     *
     * @return  the list.
     */
    List<Long> queryNotBindDeviceIdList(List<Long> deviceIdList);

    /**
     * query all device id list
     *
     * @return  the list.
     */
    List<Long> queryAllDeviceIdList();
}
